a20f7753f3f66069b716eb0d4fea28364ecb77f2,tests/frontend/org/voltdb/regressionsuites/TestAdHocPlannerCache.java,TestAdHocPlannerCache,testAdvancedBadParameters,#,366

Before Change


        VoltTable vt;

        client.callProcedure("R1.insert", 1, "foo1", 0, 1.1);
        client.callProcedure("R1.insert", 2, "foo2", 0, 2.2);
        client.callProcedure("R1.insert", 3, "foo3", 1, 3.3);

        // UNION
        // parameters in both
        sql = "SELECT ID FROM R1 B WHERE B.ID > ? UNION SELECT ID FROM R1 C WHERE C.ID > ?;";
        vt = client.callProcedure("@AdHoc", sql, 0, 0).getResults()[0];
        assertEquals(3, vt.getRowCount());
        checkPlannerCache(client, CACHE_MISS1);

        verifyAdHocFails(client, String.format(pattern, 2, 1), sql, 0);
        checkPlannerCache(client, CACHE_MISS1);

        vt = client.callProcedure("@AdHoc", sql, 1, 2).getResults()[0];
        assertEquals(2, vt.getRowCount());
        checkPlannerCache(client, CACHE_HIT2);

        verifyAdHocFails(client, String.format(pattern, 2, 3), sql, 0, 1, 2);
        checkPlannerCache(client, CACHE_MISS1);

        // parameters on right
        sql = "SELECT ID FROM R1 B WHERE NUM = 0 UNION SELECT ID FROM R1 C WHERE C.ID < ?;";
        verifyAdHocFails(client, String.format(pattern, 1, 0), sql);
        checkPlannerCache(client, CACHE_MISS1);

        verifyAdHocFails(client, String.format(pattern, 1, 2), sql, 0, 0);
        checkPlannerCache(client, CACHE_MISS1);

        vt = client.callProcedure("@AdHoc", sql, 2).getResults()[0];
        assertEquals(2, vt.getRowCount());
        checkPlannerCache(client, CACHE_MISS1);

        vt = client.callProcedure("@AdHoc", sql, 3).getResults()[0];
        assertEquals(2, vt.getRowCount());

After Change


        checkPlannerCache(client, CACHE_MISS1);
    }

    public void subtest4AdvancedBadParameters(Client client) throws IOException, ProcCallException {
        System.out.println("subtest4AdvancedBadParameters...");

        String sql;
        VoltTable vt;

        // UNION
        // parameters in both
        sql = "SELECT ID FROM R1 sub4_B WHERE ID > ? UNION SELECT ID FROM R1 sub4_C WHERE ID > ?;";
        vt = client.callProcedure("@AdHoc", sql, 0, 0).getResults()[0];
        assertEquals(3, vt.getRowCount());
        checkPlannerCache(client, CACHE_MISS2);

        verifyAdHocFails(client, String.format(pattern, 2, 1), sql, 0);
        checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);

        vt = client.callProcedure("@AdHoc", sql, 1, 2).getResults()[0];
        assertEquals(2, vt.getRowCount());
        checkPlannerCache(client, CACHE_HIT2);

        verifyAdHocFails(client, String.format(pattern, 2, 3), sql, 0, 1, 2);
        checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);

        // parameters on right
        sql = "SELECT ID FROM R1 sub4_B WHERE NUM = 0 UNION SELECT ID FROM R1 sub4_C WHERE ID < ?;";
        verifyAdHocFails(client, String.format(pattern, 1, 0), sql);
        checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);

        verifyAdHocFails(client, String.format(pattern, 1, 2), sql, 0, 0);
        checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);

        vt = client.callProcedure("@AdHoc", sql, 2).getResults()[0];
        assertEquals(2, vt.getRowCount());
        checkPlannerCache(client, CACHE_MISS2);

        vt = client.callProcedure("@AdHoc", sql, 3).getResults()[0];
        assertEquals(2, vt.getRowCount());
        checkPlannerCache(client, CACHE_HIT2);

        // parameters on left
        sql = "SELECT ID FROM R1 sub4_B WHERE NUM > ? UNION SELECT ID FROM R1 sub4_C WHERE ID > 1;";
        vt = client.callProcedure("@AdHoc", sql, 0).getResults()[0];
        assertEquals(2, vt.getRowCount());
        checkPlannerCache(client, CACHE_MISS2);

        vt = client.callProcedure("@AdHoc", sql, -1).getResults()[0];
        assertEquals(3, vt.getRowCount());